package main

import "fmt"

func main() {
	x := 1
	p := &x // p, of type *int, points to x
	fmt.Println(*p)
	*p = 2
	fmt.Println(x) // "2"
	fmt.Println()

	var r, y int
	fmt.Println("&x == &x ", &r == &r)
	fmt.Println("&x == &y ", &r == &y)
	fmt.Println("&x == nil ", &r == nil)
	fmt.Println()

	fmt.Println(f() == f())
	fmt.Println()

	v := 1
	incr(&v)
	fmt.Println(incr(&v))

}

var p = f()

func f() *int {
	v := 1
	fmt.Println(&v)
	return &v
}

func incr(p *int) int {
	*p++ // 非常重要：只是增加p指向的变量的值，并不改变p指针！！！
	return *p
}
